﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using GestionePolveri2.DAL;
using System.Reflection;
using System.ComponentModel.DataAnnotations;
using System.Data.Objects.DataClasses;
using GestionePolveriLib.BL.Reports;
using GestionePolveriLib.BL.Metadata;
using System.ComponentModel;

namespace GestionePolveriLib.BL.Reports
{
    [Serializable]
    [MetadataType(typeof(ReportDirezionaleMetadata))]
    public partial class ReportDirezionale : ReportDirezionale_Result
    {
        private int m_numeroPrelieviTot = 0;
        private double? m_giacenzaXValore = 0;
        private bool m_useCalculatedField = true;
        private string m_tag = null;

        public string Tag
        {
            get { return m_tag; }
            set { m_tag = value; }
        }

        public bool UseCalculatedField
        {
            get { return m_useCalculatedField; }
            set { m_useCalculatedField = value; }
        }

        public int NumeroPrelieviTot
        {
            get { return m_numeroPrelieviTot; }
            set { m_numeroPrelieviTot = value; }
        }

        public double? GiacenzaXValore
        {
            set { m_giacenzaXValore = value; }
            get 
            {
                if (m_useCalculatedField)
                  m_giacenzaXValore = Giacenza * PrezzoUnitario;

                return m_giacenzaXValore; 
            }
        }

        public int NumeroPrelievi
        {
            get
            {
                return this.NP_AllineamentoInventatio.GetValueOrDefault(0) +
                       this.NP_ColorwoodGrande.GetValueOrDefault(0) +
                       this.NP_ColorwoodPiccolo.GetValueOrDefault(0) +
                       this.NP_Ferro.GetValueOrDefault(0) +
                       this.NP_RAL1.GetValueOrDefault(0) +
                       this.NP_RAL2.GetValueOrDefault(0) +
                       this.NP_Reso.GetValueOrDefault(0) +
                       this.NP_Smaltito.GetValueOrDefault(0) +
                       this.NP_Sublimato.GetValueOrDefault(0) +
                       this.NP_Venduto.GetValueOrDefault(0) +
                       this.NP_Verticale.GetValueOrDefault(0) +
                       this.NP_Correzione.GetValueOrDefault(0);
            }
        }

        public ReportDirezionale()
        {
        }

        public ReportDirezionale(ReportDirezionale_Result source)
        {
            FieldInfo[] fields = source.GetType().GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static);
            foreach (FieldInfo fi in fields)
            {
                fi.SetValue(this, fi.GetValue(source));
            }
        }
    }

    [Serializable]
    [MetadataType(typeof(ReportDirezionaleMetadata))]
    public class ReportDirezionaleXXXX : ReportDirezionalePolveriXXXX_Result
    {
        public ReportDirezionaleXXXX()
        {
        }

        public ReportDirezionaleXXXX(ReportDirezionalePolveriXXXX_Result source)
        {
            FieldInfo[] fields = source.GetType().GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static);
            foreach (FieldInfo fi in fields)
            {
                fi.SetValue(this, fi.GetValue(source));
            }
        }

        public ReportDirezionale ToReportDirezionale()
        {
            ReportDirezionale retValue = new ReportDirezionale();

            retValue.Applicazione = "XXXX"; // this.Applicazione;
            retValue.Descrizione = "XXXX";
            retValue.Famiglia = "XXXX"; // this.Famiglia;
            retValue.Fornitore = "XXXX"; // this.Fornitore;
            retValue.CodicePolvere = "XXXX"; // this.CodicePolvere;
            retValue.ColoriAbbinati = "XXXX"; // this.ColoriAbbinati;

            retValue.Carico = this.Carico;
            retValue.Cons_AllineamentoInventario = this.Cons_AllineamentoInventario;
            retValue.Cons_ColorwoodGrande = this.Cons_ColorwoodGrande;
            retValue.Cons_ColorwoodPiccolo = this.Cons_ColorwoodPiccolo;
            retValue.Cons_Correzione = this.Cons_Correzione;
            retValue.Cons_Ferro = this.Cons_Ferro;
            retValue.Cons_RAL1 = this.Cons_RAL1;
            retValue.Cons_RAL2 = this.Cons_RAL2;
            retValue.Cons_Reso = this.Cons_Reso;
            retValue.Cons_Smaltito = this.Cons_Smaltito;
            retValue.Cons_Sublimato = this.Cons_Sublimato;
            retValue.Cons_Venduto = this.Cons_Venduto;
            retValue.Cons_Verticale = this.Cons_Verticale;
            retValue.Giacenza = this.Giacenza;
            //retValue.IDPolvere = this.IDPolvere;
            retValue.NP_AllineamentoInventatio = this.NP_AllineamentoInventatio;
            retValue.NP_ColorwoodGrande = this.NP_ColorwoodGrande;
            retValue.NP_ColorwoodPiccolo = this.NP_ColorwoodPiccolo;
            retValue.NP_Correzione = this.NP_Correzione;
            retValue.NP_Ferro = this.NP_Ferro;
            retValue.NP_RAL1 = this.NP_RAL1;
            retValue.NP_RAL2 = this.NP_RAL2;
            retValue.NP_Reso = this.NP_Reso;
            retValue.NP_Smaltito = this.NP_Smaltito;
            retValue.NP_Sublimato = this.NP_Sublimato;
            retValue.NP_Venduto = this.NP_Venduto;
            retValue.NP_Verticale = this.NP_Verticale;
            retValue.PrezzoUnitario = (this.PrezzoUnitario == string.Empty ? 0 : Double.Parse(this.PrezzoUnitario));
            retValue.Scarico = this.Scarico;
            retValue.ScortaMinima = (this.ScortaMinima == string.Empty ? 0 : Double.Parse(this.ScortaMinima));
            retValue.Valore = this.Valore;

            return retValue;
        }
    }

    [Serializable]
    [MetadataType(typeof(ReportDirezionaleMetadata))]
    public partial class ReportDirezionaleDettaglioXXXX : ReportDirezionaleDettaglioPolveriXXXX_Result
    {
        public ReportDirezionaleDettaglioXXXX()
        {
        }

        public ReportDirezionaleDettaglioXXXX(ReportDirezionaleDettaglioPolveriXXXX_Result source)
        {
            FieldInfo[] fields = source.GetType().GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static);
            foreach (FieldInfo fi in fields)
            {
                fi.SetValue(this, fi.GetValue(source));
            }
        }

        public ReportDirezionale ToReportDirezionale()
        {
            ReportDirezionale retValue = new ReportDirezionale();

            retValue.Applicazione = this.Applicazione;
            retValue.Descrizione = this.Descrizione;
            retValue.Famiglia = this.Famiglia;
            retValue.Fornitore = this.Fornitore;
            retValue.CodicePolvere = (this.CodicePolvere == null ? string.Empty : this.CodicePolvere);
            retValue.ColoriAbbinati = this.ColoriAbbinati;

            retValue.Carico = this.Carico;
            retValue.Cons_AllineamentoInventario = this.Cons_AllineamentoInventario;
            retValue.Cons_ColorwoodGrande = this.Cons_ColorwoodGrande;
            retValue.Cons_ColorwoodPiccolo = this.Cons_ColorwoodPiccolo;
            retValue.Cons_Correzione = this.Cons_Correzione;
            retValue.Cons_Ferro = this.Cons_Ferro;
            retValue.Cons_RAL1 = this.Cons_RAL1;
            retValue.Cons_RAL2 = this.Cons_RAL2;
            retValue.Cons_Reso = this.Cons_Reso;
            retValue.Cons_Smaltito = this.Cons_Smaltito;
            retValue.Cons_Sublimato = this.Cons_Sublimato;
            retValue.Cons_Venduto = this.Cons_Venduto;
            retValue.Cons_Verticale = this.Cons_Verticale;
            retValue.Giacenza = this.Giacenza;
            retValue.IDPolvere = this.IDPolvere;
            retValue.NP_AllineamentoInventatio = this.NP_AllineamentoInventatio;
            retValue.NP_ColorwoodGrande = this.NP_ColorwoodGrande;
            retValue.NP_ColorwoodPiccolo = this.NP_ColorwoodPiccolo;
            retValue.NP_Correzione = this.NP_Correzione;
            retValue.NP_Ferro = this.NP_Ferro;
            retValue.NP_RAL1 = this.NP_RAL1;
            retValue.NP_RAL2 = this.NP_RAL2;
            retValue.NP_Reso = this.NP_Reso;
            retValue.NP_Smaltito = this.NP_Smaltito;
            retValue.NP_Sublimato = this.NP_Sublimato;
            retValue.NP_Venduto = this.NP_Venduto;
            retValue.NP_Verticale = this.NP_Verticale;
            retValue.PrezzoUnitario = (this.PrezzoUnitario == string.Empty ? 0 : Double.Parse(this.PrezzoUnitario));
            retValue.Scarico = this.Scarico;
            retValue.ScortaMinima = (this.ScortaMinima == string.Empty ? 0 : Double.Parse(this.ScortaMinima));
            retValue.Valore = this.Valore;

            return retValue;
        }
    }
}

